package com.zjj.learn.designmodel.work.state;

public class StateModelTest {

    public static void main(String[] args) {
        //初始化电梯
        MyElevator myElevator = new MyElevator();
        //给一个原始状态
        myElevator.setState(ElevatorStatus.STOP);

        //操作电梯，执行指令时会根据电梯当前的状态判断是不是要继续执行
        myElevator.open();
        myElevator.close();
        myElevator.run();
        myElevator.close();
    }

    /**
     * 状态模式的使用：
     *    状态模式是一种行为型设计模式，它允许对象在其内部状态发生改变时改变它的行为。
     *    换句话说，状态模式允许对象在运行时根据其内部状态选择它的行为，从而使得对象看起来似乎改变了它的类。
     *
     *   状态模式的核心是将对象的状态从对象内部转移到外部，也就是让状态变成一个独立的类，这能够让状态得到拓展和复用。
     *   状态模式的使用场景通常是当一个对象需要根据它的状态来改变它的行为时，我们可以使用状态模式来解决这类问题。
     *
     *
     * 例如：
     *     电梯有开门、关门、运行、停止状态。每一种状态改变时，都要根据当前的状态来判断是否可以进行下一步操作。
     *     例如，当电梯运行时就不能进行开门操作。
     *     具体代码请见：{@link com.zjj.learn.designmodel.work.state}
     *
     * 存在的问题：
     *     1、使用了大量的switch…case这样的判断（if…else也是一样)，使程序的可阅读性变差。
     *     2、扩展性很差。如果新加了断电的状态，我们需要修改上面判断逻辑
     *
     *
     **/

}
